package routers

import (
	"encoding/json"
	"net/http"
	"yz-go/Controllers"
	"yz-go/Middlewares"

	"github.com/gin-gonic/gin"
)

func AppRoutes(r *gin.Engine) {

	// 加载html文件
	r.LoadHTMLGlob("templates/*")
	// 加载静态文件 比如 图片 css js
	r.Static("/static", "./static") // 第一个相对 目录去找 	第二个根目录下找

	r.GET("/index", func(c *gin.Context) {
		c.HTML(http.StatusOK, "index.html", gin.H{
			"msg": "这是后端传来的东西！",
		})
	})

	// 任务推送数据
	r.GET("/flow/push", Controllers.FlowPush)

	// 测试redis
	r.GET("/redis/tst", Controllers.RedisTest)

	// resterful 风格传参方式 试用冒号
	r.GET("/user/info/:uid/:uname", func(ctx *gin.Context) {
		// 如果用传统的方式传参 就用query
		// 如果用 resterful 风格 就用Param， Params是接收多个参数

		// http://localhost/user/info/2/name
		uid := ctx.Param("uid")
		uname := ctx.Param("uname")
		ctx.JSON(http.StatusOK, gin.H{
			"uid":   uid,
			"uname": uname,
		})
	})

	// 解析json
	r.POST("/json", func(ctx *gin.Context) {

		// request.body
		info, _ := ctx.GetRawData() // 返回切片

		var mp map[string]interface{}

		_ = json.Unmarshal(info, &mp) // 第一个参数 切片byte，第二个any 任何
		ctx.JSON(http.StatusOK, mp)   // 正常返回json序列号
	})

	// 获取表单
	r.POST("/user/add", func(ctx *gin.Context) {
		name := ctx.PostForm("name")
		age := ctx.PostForm("age")
		ctx.JSON(http.StatusOK, gin.H{
			"age":  age,
			"name": name,
		})
	})

	// 重定向
	r.GET("test", func(ctx *gin.Context) {
		ctx.Redirect(http.StatusMovedPermanently, "http://www.baidu.com") // 或者可以直接写301
	})

	// 404 注意写法 和其他的不一样
	r.NoRoute(func(ctx *gin.Context) {
		ctx.HTML(http.StatusNotFound, "404.html", nil) //  会从上面的 templates下面找
	})

	MysqlRouterGroup := r.Group("/midd", Middlewares.InitMiddleware)
	{
		MysqlRouterGroup.GET("/LockQuery", Controllers.LockQuery)
		MysqlRouterGroup.GET("/exp", Controllers.ExpResume)
		MysqlRouterGroup.GET("/file-up", Controllers.UploadFile)
		MysqlRouterGroup.POST("/login", Controllers.Login)

		MysqlRouterGroup.GET("/job/list2", Controllers.GetJobList)

		// 腾讯组件
		MysqlRouterGroup.POST("/tx/ds", Controllers.Distinguish)

		// 获取分类树形结构
		MysqlRouterGroup.GET("/cate/tree", Controllers.GetCategoryTree)

		// 深造接口
		MysqlRouterGroup.GET("/szCourseList", Controllers.SZCourseList)
		// 深造接口 - 绑定课程验证
		MysqlRouterGroup.GET("/refreshBindCourseValidate", Controllers.RefreshBindCourseValidate)

		// 创建一个嵌套的路由组，并为该组添加中间件
		MysqlRouterGroupWithMiddleware := MysqlRouterGroup.Group("/pc")
		MysqlRouterGroupWithMiddleware.Use(Middlewares.JWTAuthMiddleware())

		MysqlRouterGroupWithMiddleware.GET("/job/list", Controllers.GetJobList)
		MysqlRouterGroupWithMiddleware.GET("/job/list/ag", Controllers.GetJobListByModel)
		MysqlRouterGroupWithMiddleware.GET("/city/list", Controllers.GetCityList)
		MysqlRouterGroupWithMiddleware.POST("/note/creat", Controllers.CreateNotes)
		MysqlRouterGroupWithMiddleware.GET("/dtl-resume", Controllers.GetNotes)
		MysqlRouterGroupWithMiddleware.GET("/job/creat", Controllers.CreateJobs)

		// 获取分类【用户有登录并且有求职意向就获取用户的意向分类】
		MysqlRouterGroupWithMiddleware.GET("/category", Controllers.GetCategoryList)
	}

}
